// !#1 指定更加具体的类型
// a 要是一个数组，数组里面有 T 类型
/* function test<T>(a: T[]): T[] {
  return a
}
test<string>(['hello'])
test<number>([8]) */

// !#2 通过 extends 进行泛型约束
/* interface Ilength {
  length: number
}

function test<T extends Ilength>(a: T): T {
  return a
}
// test<string>('hello')
// test<number[]>([1, 2, 3])
test<{ length: number }>({ length: 888 }) */

function test<T extends { length: number }>(a: T): T {
  return a
}
test<string>('hello')
test<number[]>([1, 2, 3])
test<{ length: number }>({ length: 888 })

export {}
